var CONFIG = require('../../../commonUtils/config');
var CODE = require('../../../commonUtils/code');
var CommonUtil = require('../../../commonUtils/util/CommonUtil');
// CODE.OPERATION_SUCCESS = "成功";
// CODE.OPERATION_FAILED = "失败";


var retUtil = function () {

    function retUtil() {
    }

    /**
     * 从请求句柄中获取 number 类型的参数值
     *
     * @param req object 请求句柄
     * @param name string 请求参数名
     *
     * @return num number 类型参数值, 默认为 0
     * */
    retUtil.numberFromReq = function (req,name){
        return Number(req.query[name] || req.body[name] || '0')||0;
    };

    /**
     * 从请求句柄中获取 string 类型的参数值
     *
     * @param req object 请求句柄
     * @param name string 请求参数名
     *
     * @return str string 类型参数, 若取不到则为 null
     * */
    retUtil.stringFromReq = function (req,name){
        return req.query[name] || req.body[name] || null;
    };

    //------------------------------------------------------------------
    /**
     * 从请求句柄中直接提取 Array 字符串 类型的参数值, 并序列化为 Array
     *
     * @param req object 请求句柄
     * @param name string 请求参数名
     *
     * @return arr 数组, 若不存在或者非法 json, 则返回 null
     * */
    retUtil.arrayFromReq = function (req,name){
        var ret = null;
        var str = req.query[name] || req.body[name] || null;
        if (str === null || str.length < 2 || str[0]!=='[' || str[str.length-1]!==']') {
            ret = null;
        }else{
            try{
                ret = JSON.parse(str);
            }catch(err){
                console.log('yjx/v1/util/retUtil.js [arrayFromReq] JSON.parse err: ' + err);
            } finally {

            }
        }
        return ret;
    };
    /**
     * 从请求句柄中直接提取 Array 字符串 类型的参数值, 并序列化为 Array
     *
     * @param req object 请求句柄
     * @param name string 请求参数名
     *
     * @return arr 数组, 若不存在或者非法 json, 则返回 null
     * */
    retUtil.objectFromReq = function (req,name){
        var ret = null;
        var str = req.query[name] || req.body[name] || null;
        if (str === null || str.length < 2 || str[0]!=='{' || str[str.length-1]!=='}') {
            ret = null;
        }else{
            try{
                ret = JSON.parse(str);
            }catch(err){
                console.log('yjx/v1/util/retUtil.js [arrayFromReq] JSON.parse err: ' + err);
            } finally {

            }
        }
        return ret;
    };

    /*
    * 统一返回 json
    *
    * @param success 0/1 请求是否成功标记
    * @param msg string 成功/失败描述
    * @param data object 响应数据
    * @param res object 响应句柄
    * */
    retUtil.ret_func_json = function (success, msg, data, res){
        var obj = {
            success: success,
            msg: msg,
            data: data
        };
        // 返回
        res.set('Content-Type', 'application/json');
        res.json(obj);
    };

    /**
     * 统一返回成功的 json
     *
     * @param data object 响应数据
     * @param res object 响应句柄
     * */
    retUtil.ret_succ_json = function (data, res) {
      return retUtil.ret_func_json(1, CODE.OPERATION_SUCCESS, data, res);
    };

    /**
     * 统一返回失败的 json
     *
     * @param errMsg string 错误描述
     * @param res object 响应句柄
     * */
    retUtil.ret_err_json = function (errMsg, res) {
        var msg = typeof errMsg === 'string' ? errMsg : CODE.OPERATION_FAILED;
        return retUtil.ret_func_json(0, msg, {}, res);
    };


    /**
     * 统一返回失败的 html
     *
     * @param errMsg string 类型, 错误描述
     * @param redirectUrl string 类型, 用户点击跳转地址
     * @param res object 类型, 响应句柄
     * */
    retUtil.ret_err_html = function (errMsg, redirectUrl, res) {
        var msg = typeof errMsg === 'string' ? errMsg : CODE.OPERATION_FAILED;
        var retJson = {
            message : msg,
            url : redirectUrl
        };
        res.render('error', retJson);
    };

    /**
     * 统一返回 404 页面的 html
     *
     * @param message string 类型, 提示信息
     * @param redirectUrl string 类型, 用户点击跳转地址
     * @param res object 类型, 响应句柄
     * */
    retUtil.ret_404_html = function (message, redirectUrl, res) {
        var msg = typeof message === 'string' ? message : CODE.OPERATION_FAILED;
        var retJson = {
            message : msg,
            url : redirectUrl
        };
        res.render('error', retJson);
    };

    /**
     * 安全解析 json 字符串
     *
     * @author 王俊
     * @date 2017-11-19
     *
     * @param jsonString
     * @return result Object 若解析失败则为 null
     */
    retUtil.safe_parser_JSON_string = function (jsonString) {
        var result = null;
        if (!jsonString || jsonString.length < 2) {
            return result
        }
        try {
            result = JSON.parse(CommonUtil.process_before_JSON_Parse(jsonString));
        } catch (e) {
            console.log('yjx/v1/util/retUtil.js [safe_parser_JSON_string] JSON: ' + jsonString);
            console.log('yjx/v1/util/retUtil.js [safe_parser_JSON_string] err: ' + e);
        } finally {

        }
        return result;
    };

    return retUtil;
}();

module.exports = retUtil;